package com.sairobo.base.modules.sys.service.impl;

import com.google.gson.Gson;
import com.sairobo.base.common.entity.Page;
import com.sairobo.base.common.entity.Query;
import com.sairobo.base.common.entity.R;
import com.sairobo.base.common.exception.RRException;
import com.sairobo.base.common.service.CommonService;
import com.sairobo.base.common.utils.CommonUtils;
import com.sairobo.base.modules.sys.manager.SysConfigManager;
import com.sairobo.base.modules.sys.entity.SysConfig;
import com.sairobo.base.modules.sys.service.SysConfigService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * 系统配置信息表
 *
 * @author admin
 * @email sairobo
 * @url www.sairobo.com
 * @date 2018年1月17日 下午7:58:10
 */
@Service("sysConfigService")
public class SysConfigServiceImpl extends CommonService implements SysConfigService {

	@Autowired
	private SysConfigManager sysConfigManager;

//    @Autowired
//    private SysConfigMapper sysConfigMapper;

	@Override
	public Page<SysConfig> listSysConfig(Map<String, Object> params) {
		Query query = new Query(params);
		Page<SysConfig> page = new Page<>(query);
		sysConfigManager.listSysConfig(page, query);
		return page;
	}

	@Override
	public R saveSysConfig(SysConfig role) {
		int count = sysConfigManager.saveSysConfig(role);
		return CommonUtils.msg(count);
	}

	@Override
	public R getSysConfigById(Long id) {
		SysConfig sysConfig = sysConfigManager.getSysConfigById(id);
		return CommonUtils.msg(sysConfig);
	}

	@Override
	public R updateSysConfig(SysConfig sysConfig) {
		int count = sysConfigManager.updateSysConfig(sysConfig);
		return CommonUtils.msg(count);
	}

	@Override
	public R batchRemove(Long[] id) {
		int count = sysConfigManager.batchRemove(id);
		return CommonUtils.msg(id, count);
	}



    @Override
    public String getValue(String key) {
        SysConfig config = sysConfigManager.queryByKey(key);
        return config == null ? null : config.getValue();
    }

    @Override
    public <T> T getConfigObject(String key, Class<T> clazz) {
        String value = getValue(key);
        if(StringUtils.isNotBlank(value)){
            return new Gson().fromJson(value, clazz);
        }

        try {
            return clazz.newInstance();
        } catch (Exception e) {
            throw new RRException("获取参数失败");
        }
    }

    @Override
    public void updateValueByKey(String key, String value) {
        sysConfigManager.updateValueByKey(key, value);
    }
}
